﻿/*	Test rozkazu DzD - Dzielenia Długiego

 Dane:

[0c02000] = 0c1500000000000; =0.01101	// dzielna  = 13/32
[0c02001] = 0c3600000000000; =0.11110	// dzielnik = 30/32


 Długi iloraz, dzielna/dzielnik = 13/30, zostanie zapisany w komórkach [0c10000]..[0c10005]:

[0c10000] = bity   0... 38	Ω = bit  39	dla N=43	(bit 0 = bit znaku)
[0c10001] = bity  39... 77	Ω = bit  78	dla N=82
[0c10002] = bity  78...116	Ω = bit 117	dla N=121
[0c10003] = bity 117...155	Ω = bit 156	dla N=160
[0c10004] = bity 156...194	Ω = bit 195	dla N=199
[0c10005] = bity 195...233	Ω = bit 234	dla N=238

 Najdalsze możliwe do uzyskania bity ilorazu znajdą się w komórce [0c10206],
 a po zaokrągleniu bitem Omega dodatkowo będą zapisane  w komórce [0c10406]:

[0c10206] = bity 212...250	Ω = bit 251	dla N=255
[0c10406] = bity 212...250	zaokrąglone bitem Ω


 Wynik:
<-------- [0c10000]: bity 0..38 -------><------- [0c10001]: bity 39..77 ------><------ [0c10002]: bity 78..116 ------><------ [0c10003]: bity 117..155 -----><------ [0c10004]: bity 156..194 -----><------ [0c10005]: bity 195..233 ----->
0.01101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101
<                                      ><                                     ><                                     ><                                     ><                [0c10206]: niezaokrąglone bitem Omega  011101110111011101110111011101110111011
                                                                                                                                                                              [0c10406]:    zaokrąglone bitem Ω=1:   011101110111011101110111011101110111100
                                                                                                                                                                                                                     <----------- bity 212..250 ----------->
 Słowo w komórce [0c10206], na pozycjach bitowych 22..38 zawiera już tylko
 17 dodatkowych bitów ilorazu w uzupełnieniu do wcześniej otrzymanych.
 Bity 0..21 tego słowa pokrywają się z bitami 17..38 poprzedniego słowa,
 zapisanego w komórce [0c10005].

 Słowo w komórce [0c10406] zawiera zaokrągloną bitem Omega wersję słowa z komórki [0c10206].
 Zaokrąglenie to (normalne) polega na dodaniu bitu Omega na najmłodszej pozycji
 bitowej słowa, z ewentualnym przeniesiem na starsze pozycje.
 Zatem bity 0..21 słowa [0c10406] mogą być inne niż te same bity słowa [0c10206]
 i bity 17..38 słowa zapisanego w komórce [0c10005]. Co więcej, zaokrąglenie może
 wymagać propagacji przeniesienia na wszystkie komórki zawierające starsze bity,
 a nawet spowodować nadmiar (przeniesienie na bit znaku ilorazu).

 Bit nr 0 w początkowej komórce ilorazu jest bitem znaku ilorazu.
 W następnych komórkach ilorazu, bity nr 0 są zwykłymi bitami rozwinięcia liczby.

*/


;Etyk:	Rozkaz			Komentarz
;=====	===================	================================
	BLOK	0		;Adres początku programu

TEST	A=[licznik]
	M=[mianown], M, A=A/M
	[iloraz0] = A		;bity   0..38	Ω = bit 39

	A=[licznik]
	DzD	82		;A = A // M, 82
	[iloraz1] = A		;bity  39..77	Ω = bit 78

	A=[licznik]
	DzD	121		;A = A // M, 121
	[iloraz2] = A		;bity  78..116	Ω = bit 117

	A=[licznik]
	DzD	160		;A = A // M, 160
	[iloraz3] = A		;bity 117..155	Ω = bit 156

	A=[licznik]
	DzD	199		;A = A // M, 199
	[iloraz4] = A		;bity 156..194	Ω = bit 195

	A=[licznik]
	DzD	238		;A = A // M, 238
	[iloraz5] = A		;bity 195..233	Ω = bit 234

	A=[licznik]
	DzD	255		;A = A // M, 255	Najdalsze możliwe do uzyskania bity ilorazu
	[ilorazD] = A		;bity 212..250	Ω = bit 251

	Okr			;A = A + Ω	Najdalsze możliwe do uzyskania bity ilorazu
	[ilorazO] = A		;bity 212..250	po zaokrągleniu normalnym bitem Omega

	Stop 0c17777 ..TEST


	BLOK	0c02000		;Przykładowe dane
licznik	:150 00000 00000 00	;=0.01101	// dzielna  = 13/32
mianown	:360 00000 00000 00	;=0.11110	// dzielnik = 30/32


iloraz	QBLOK	0c10000		;Słowa wyniku dzielenia długiego
iloraz0	:000 0 0 0
iloraz1	:000 0 0 0
iloraz2	:000 0 0 0
iloraz3	:000 0 0 0
iloraz4	:000 0 0 0
iloraz5	:000 0 0 0
ilorazD	QBLOK	*+0c200		;Najdalsze możliwe do uzyskania bity ilorazu
ilorazO	QBLOK	ilorazD+0c200	;to samo po zaokrągleniu normalnym bitem Omega


	Koniec
==
